package edu.corn.statemachine.core.context;

import edu.corn.statemachine.StateMachineSupport;
import edu.corn.statemachine.core.StateMachine;
import lombok.AllArgsConstructor;
import lombok.Data;

import java.util.HashMap;

@Data
@AllArgsConstructor
public class DefaultStateContext<S extends Enum<S>, E extends Enum<E>> implements IStateContext<S, E> {


    /*
      传入源状态和目标状态是期望收集尽可能多的信息，供于之后可能存在的持久化操作。
      或者异步执行状态转换的操作。
     */

    /**
     * 上下文参数。
     */
    private final HashMap<String ,Object> params = new HashMap<>();

    /**
     * 源状态
     */
    S sourceState;

    /**
     * 目标状态
     */
    S targetState;

    /**
     * 事件
     */
    E event;

    /**
     * 对象
     */
    StateMachineSupport<S> support;


    @Override
    public Object getParam(String key) {
        return params.get(key);
    }

    @Override
    public void putParam(String key, Object value) {
        params.put(key, value);
    }

    @Override
    public E getEvent() {
        return event;
    }

    @Override
    public StateMachineSupport<S> getSubject() {
        return support;
    }

    @Override
    public void putSubject(StateMachineSupport<S> support) {
        this.support = support;
    }
}
